package com.cn.wanxi.util;


public class ReadMe {
    /**
     * 2021-12-20
     * 将所有的数据存放在数据库
     * 数据库怎么创建？数据库表结构怎么创建？
     * ---------------------------
     * 产品经理：产品调研，竞品分析，商业论证，产品说明书（和客户进行分析有没有必要做？）
     * 产品进路：需求分析？ 概念分析？概念模型----数据模型里面（概念模型，物理模型，逻辑模型）
     * E-R图 ---需求文档：概念需求--详细需求
     * UML 统一建模语言---（用例图，类图，时序图，逻辑图。。。）9个
     * ------------------------------
     * 概念模型 --主要是拿给用户看，只有对象的特征  基本上是中文
     * 逻辑模型---主要是给程序员看  ，会增加数据类型   全是英文
     * 以后我们会通过工具，直接方向生产Java代码
     * 物理模型  ---主要是数据库程序员看  多一些数据类型
     * ------------------------------------------
     * 逻辑模型怎么画？有什么工具？ rose  powerdesigner
     * 泛化关系---继承和实现都是子类和父类的关系---
     * 依赖关系 --- 把类当作参数进行传递
     * 关联关系---当把另外一个类当作自己的属性时
     * 组合和聚合
     * ---------------------------
     * 低耦合高内聚
     * 对修改关闭 对扩展开放
     * ------------------------
     * 对象自我的关系？Uesr(模块)
     * 用例图：让用户看得懂
     * ----------------------------------
     * 架构师：平台建设，核心代码，工具类，包
     * -----------------------
     * 对于普通程序员：ctrl+c,ctrl+v
     * -------------------------------
     * 物理模型：--------------和物理模型一对一
     * 数据库和Java之间的对象关系和数据类型的区别？
     * Java类         和           数据库表
     * 属性名：小驼峰linePhone               下划线line_phone
     * 数据类型：
     * String                   varchar,char,text
     * Integer                     int
     * BigDecimal                decimal
     * Date                        date   datetime  time
     * Long                      bigint
     * Byte                      tinyint
     * Java基本类型用于局部变量 ，所有的属性类型全部用引用类型
     * 数据库也是一门语言：属据类型，语法结构，面向对象，函数 （Java叫做方法）
     * UML需要熟悉的图
     * 1.E-R图
     * 2.用例图
     * 3.类图
     * 4.时序图
     * 5.逻辑图
     * 6.流程图
     */
    /**
     * 2021-12-21 数据库
     * 1.定义？是什么
     * 2.做什么？应用场景
     * 3.为什么要用？优势
     * 4.怎么用？
     * --------------------------
     * 数据库的语句分类
     * char  varchar  text 区别？
     * 不能用关键字命名
     * 以后密码都会加密：一般加密陈32位字符串
     * DATETIME和TIMESTAMP的区别？
     * MySQL 是否可以设置布尔值？
     * date 年月日
     * time 时分秒
     *CREATE SCHEMA `canyin` ;
     * CREATE TABLE `canyin`.`user` (
     *   `id` INT NOT NULL AUTO_INCREMENT,
     *   `username` VARCHAR(45) NULL,
     *   `password` CHAR NULL,
     *   `sex` VARCHAR(2) NULL,
     *   `age` TINYINT UNSIGNED NULL,
     *   `phone` CHAR NULL,
     *   `email` VARCHAR(45) NULL,
     *   `birthday` TIMESTAMP NULL,
     *   `line_phone` VARCHAR(45) NULL,
     *   `content` TEXT NULL,
     *   `create_time` TIMESTAMP NULL,
     *   `is_show` boolean null,
     *   PRIMARY KEY (`id`));
     *   -- create   table  表名(字段名 数据类型，字段名 数据类型)
     *
     *   DROP TABLE `canyin`.`user`;
     *
     *
     * ALTER TABLE `canyin`.`user`
     * ADD COLUMN `is_show` TINYINT NULL AFTER `create_time`,
     * CHANGE COLUMN `password` `password` CHAR(32) NULL DEFAULT NULL ,
     * CHANGE COLUMN `sex` `sex` TINYINT NULL DEFAULT NULL ;
     *
     * use canyin;-- 选中数据库
     *
     * INSERT INTO `user` (`username`, `password`, `sex`, `age`, `phone`, `email`, `birthday`, `line_phone`,
     *  `content`, `create_time`, `is_show`)
     *  VALUES ('1', '1', '1', '1', '1',  '1','2021-11-11',
     *  '1', '1',sysdate(), '1') ,('1', '1', '1', '1', '1',  '1','2021-11-11',
     *  '1', '1', now(), '1');
     * -- 拿到系统时间
     * -- select sysdate()
     * UPDATE `user` SET
     * `username` = '2',
     * `password` = '2',
     *  `sex` = '2',
     *  `age` = '2',
     *  `phone` = '2',
     *  `email` = '2',
     *  `birthday` = now(),
     *  `line_phone` = '2', `content` = '2',
     *  `create_time` =sysdate(),
     *  `is_show` = '2'
     *  WHERE (`id` = '6');
     * SELECT id,username,date_format(birthday,'%y/%m-%d') birthday FROM canyin.user;
     */
    /**
     * 2021-12-22 MySQL 查询语句
     * SELECT * FROM canyin04.product;
     * -- 表与表之间的关系  一对一  一对多 多对一 多对多
     * -- 类于类之间的关系？
     * -- 泛化  继承和实现   依赖   关联--聚合和组合
     * -- 产品和菜系  多对一
     * --  id,name,price ,caixi_id                   id,name   -- 删除一个表的某条数据，会删除其他表的数据，级联关系（不用，禁用）安全
     * -- 可以表示一个产品对应一个菜系   这是最简单的用法 不能设置caixi_id为产品的外键关联（禁用外键）
     * -- 我们可以把caixi_id理解成外键（和另一个表相关联的列）不能设置外键
     * select * from product as p ,cuisine as c  where  p.cuisine_id=c.id;
     * -- 以后我们不要这么去建表-- 如果表数据不大可以这样
     * -- 在多表查询时，我们需要将表名重新命名一个别名
     * select p.*,c.* from product as p ,product_cuisine_ralation pc ,cuisine c
     * where p.id=pc.product_id and c.id=pc.cuisine_id;
     * -- 关联查询   别名
     * -- 推荐别名的命名方式 t1,t2,t3...
     * select t1.*,t3.* from product t1
     * inner join product_cuisine_ralation t2
     * on t1.id=t2.product_id
     * join cuisine t3
     * on t3.id=t2.cuisine_id;
     * -- where 和 on  后面跟条件查询语句
     * -- 内连接
     * select t1.*,t3.* from product t1
     * left join cuisine t3
     * on t3.id=t1.cuisine_id;
     * -- 左连接   就是以左边的表为基准，和右边的表进行组合，如果右边的表和当前表的数据没有对应的数据，则以null进行填充
     * select t1.*,t3.* from product t1
     * right join cuisine t3
     * on t3.id=t1.cuisine_id;
     * -- 右连接
     * select * from product, cuisine; -- 笛卡尔积
     * select now();
     * select max(normal_price) from product ;
     * -- Java 运算符 逻辑 算术  赋值   条件  比较  位 三元
     * select * from product where id>5  or is_show=1;
     * select * from product where id>=5  and id<=111;
     * select * from product where id between  5 and 111;
     * -- ++  i++；i=i+1;
     * select * from product where id in(1,2,5,7);
     * select * from product where id not in(1,2,5,7);
     * -- in 保证 后面的数组 不能太多，一般大于1000后不要用
     * select * from product order by name asc;
     * select * from product order by name desc;
     * -- desc 降序 默认升序排列 asc可以省略
     * select * from product order by price ,is_show desc;
     * select is_show from product group by id,is_show;
     * -- 分组，是指根据group by后面的字段进行不同分组 把不同的都显示出来
     * -- 收到客户端{pageNo:1,pagesize:10}第几页和每一页显示多少天
     * -- select * from table limit (pageNo-1)*pageSize, pageSize;
     * -- 2,4
     * select * from product limit 4;
     * -- select * from product limit start,size;
     * -- 说明 我们limit 后面的代码不能出现运算符 只能是一个结果
     *
     * -- 模糊查询
     * -- % 代表可以替换的字符，可以是0个或者多个
     * select * from  product where name like '%a%';
     * select * from  product where name like 'a%';
     * select * from  product where name like '%a';
     * select locate('a',name),id from product;
     *
     * select * from  product where name like '_a';
     * select * from  product where name regexp('[^dfa]a');
     *
     * select * from (
     * (select * from  product where is_show=1 limit 2)
     * union
     * (select * from  product where is_recommend=1 limit 2)
     * union
     * (select * from  product  where is_show!=1 and is_recommend!=1 limit 4) ) aa
     * order by id desc;
     * 书写顺序
     * -- select -->from-->where -->group by-->having-->order by -->limit
     *
     *
     * SELECT * FROM canyin04.user where hobby like '%c%';
     * SELECT * FROM canyin04.user where FIND_IN_SET('c',hobby);
     * -- FIND_IN_SET 当我们需要查询某一列里面的某一个单独的数据时，
     * -- 当前列必须以,逗号的形式保存，会把里面的每一个数据当作一个整体进行查询
     */

    /**
     * 2021-12-23 验证码
     * 思路？
     * 1.随机数  Random random = new Random();
     * 2.StringBuilder和String和StringBuffer的区别？
     * 3.ascii码数字转换为字符
     * 4.ascii码字母转换成字符
     * 5.颜色设置？
     * --------------------------
     * 前端访问后台验证码，直接调用接口/code
     * 点击图片再次访问后台代码 --
     * js的事件？点击事件
     * 浏览器有一个保护机制，当下一次访问服务器的地址一样，则直接取缓存的数据
     *
     */
    /**
     * 2021-12-24
     * 登录流程图
     * js知识点
     * 变量：
     * 局部，全局。类，静态，
     * 数据类型  标识符；String  name；
     * js 变量
     * 变量的定义？
     */
    /**
     * 2021-12-27 用户登录
     * 1.页面
     * 2.正则表达式
     * 3.点击提交数据到后台 1. ajax         2.对返回的数据进行逻辑判断
     * 4.写servlet  返回json格式
     * 5.service  逻辑判断（验证码，用户名和密码）
     * 6.dao     1.sql 2.解析结果集
     * 7.要学会JDBC手写
     * -------------------
     * 要学会debug
     */

    /**
     * 2021-12-28
     * 页面之间相互传值
     * sesstion
     */
    /**
     * 2021-12-30 添加
     * 1.写页面
     * 2.写js，如果需要将表单元素加载出来，需要加载form的js
     * 3.引入myajax，然后通过返回的结果写逻辑关系
     * 4.写servlet
     * 5.service
     * 6.dao   sql语句
     * -----------------------------------------------------
     * js 取得复选框的值
     * 分页查询
     * 增加sql语句 ：时间  不需要引号括起来
     * 总条数
     *
     */
    /**
     * 2022-1-4 编辑
     * 1.点击编辑时，弹出编辑页面
     * 2.然后应该将当前数据传入到编辑页面？是不正确的
     *      两个页面之间相互传值，不能太多，否则容易丢失数据
     *      以后只是查询需要的数据，不能查询所有，所以 select  后面禁止用*来代替所有
     * 3.应该拿到当前的id，再通过id取查询数据库，并显示相应的数据
     * ------------------------------------------------------
     * 编辑：
     * 点击编辑时，只需要拿到当前操作的数据id，
     * 然后跳转页面，并将id传入到编辑页面
     * 4.应该根据当前的id取数据库查询，然后将所得数据赋值到页面
     */
    /**
     * 2022-1-5 编辑
     * 1.页面
     * 2.js   取值---监听提交 --ajax
     * 3.servlet
     * 4.service
     * 5.dao
     *---------------------------------------
     * 如果操作编辑不成功，最大的问题就是sql语句？
     */
    /**
     * 2022-1-6 动态数据的查询
     * 1.赋值页面，修改表
     * <table class="layui-hide" id="table" lay-filter="table"></table>
     * 2.创建js代码
     * layui.use(['laydate', 'form', 'table'],
     *     function () {
     *         var laydate = layui.laydate;
     *         let table = layui.table;
     *         let form = layui.form;
     * 3.编写table.render();
     *      注意：url：访问后台的接口（webservlet地址）
     *      开启分页
     *      field 和model里面的属性对应
     * 4.如果想要最右边的操作：查看，编辑，删除
     *      1.{fixed: 'right', width: 200, align: 'center', toolbar: '#barDemo'}
     *      2.必须引入模板
     *      <script type="text/html" id="barDemo">
     *                                 <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">查看</a>
     *                                 <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="edit">编辑</a>
     *                                 <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="del"><i class="layui-icon">&#xe639;</i>   </a>
     *
     *                             </script>
     *      3.如果想要enable状态直接控制
     *      <script type="text/html" id="enable">
     *                                 <!-- 这里的 checked 的状态只是演示 -->
     *                                 <input type="checkbox" name="enable" value="{{d.id}}" lay-skin="switch" lay-text="启用|停用" lay-filter="enable" {{ d.enable == 1 ? 'checked' : '' }}>
     *                             </script>
     *      4.如果需要对图片进行显示，也需要引入模板
     *      <script type="text/html" id="imgHref">
     *                                 <!-- 这里的 checked 的状态只是演示 -->
     *                                 <img src="{{d.img}}" />
     *                             </script>
     *   注意：如果想要渲染不懂的样式，可以分为很多种：三种渲染方式
     *
     *
     */
    /**
     * 2022-1-7 产品分页 和新增
     * 分页  必须保证返回值里面有总条数
     * 新增思路：
     * 打开页面时，必须将菜系加载出来
     * 1.创建增加html---修改需要添加的属性值
     * 2.自定义验证格式是否输入正确，添加监听事件
     * -------------------------------
     * 3.servlet    注意数据类型转换（异常）
     * 4.service
     * 5.dao  sql语句
     * ----------------------------------
     * 对接口进行封装
     */
    /**
     * 2022-1-11
     * 封装ResultModel
     * 模糊查询
     */
    /**
     * 2022-1-13 总结
     * 第一阶段：
     * html：div   a   img   属性：class  id  style  自定义属性
     * css：key-value  display：flex
     * 地图：
     * 第二阶段：
     * 数据类型：基本，引用 ：类，注解，接口，枚举，包装类，大写的类：命名规则：大驼峰
     * 强弱虚软：强引用软引用弱引用虚引用的区别
     * 类的组成部分？ 包，类名，属性，方法，构造方法---反射：
     * 包命名规则：全小写，每个包应该包含不同的意思
     * 类名：大驼峰----------如果要创建类，必须创建包
     * 属性：方法  小驼峰
     * 常量：全大写   以下划线分开   FILE_NAME
     * 关键字：权限修饰符  特征修饰符
     * 四个权限修饰符：区别？
     * public  任何地方都可以调用
     * private  只能在自己的类里面调用（不包括子类）
     * protected  子类调用
     * 默认不写   只能在同包里面调用,不能是子包
     * --------------------------------
     * 特征修饰符
     * static  --- 静态：我们开辟一次空间，项目启动时，直接创造一个对象，只创建一次
     * 应用场景：多次调用不用再次创建对象：
     * final
     * 修饰类： 类不能被继承
     * 修饰方法：方法不能被重写
     * 修饰属性：一般用于常量
     * -------------------------------------
     * 类的加载顺序？
     * 静态代码块》代码块》构造方法
     * 构造方法是否有返回值？
     * ------------------------------
     * 我们一般什么情况下会写父类？提取一个共同的基类！
     * 这个基类可以有很多表示方法？
     * 如果基类里面有共同的属性和方法，我们把它提取为一个抽象类
     * public abstract class Parent
     * 抽象类里面如果需要子类必须重写方法，则必须对方法设置成抽象方法
     * abstract void aa() ; 不能写方法体：而子类必须继承它
     * 在这里会进行分支：如果里面全是方法，则会用另一个特殊的抽象类表示：接口
     * 接口里面的方法默认全部为抽象方法：那么权限修饰符应该是什么？public
     * 接口里面可不可以写方法体？有没有不是抽象方法？请问这是jdk那个版本的新特性？
     * 那么全是属性呢？我们就会用另一个抽象类表示：枚举：枚举里面全是常量
     * 抽象类命名：abstract 开头
     * 接口：以I开头
     * 枚举以enum结尾
     * -----------------------------------------
     * 数组：定义数组的两种方式？
     * String [] aa=new String [4];
     * String [] bb={"a","b"};
     * --------------------------------------------------
     * req请求,resp响应--------前端请求后台  后台响应给前端
     * service的生命周期----------
     * doget和dopost的区别？
     * 页面转发和重定向的区别？
     * jsp的九大内置对象：
     * servlet的四大作用域:req,session, application
     * 语法结构：for  --fori  foreach  while 和do while的区别？
     * if else 注意：不要多重嵌套？ switch case  淘汰（不用）--设计模式：工厂和策略模式
     * ---------------------------------------------------------
     * 三层架构：页面控制层servlet  数据实现层 dao 业务逻辑层service
     * MVC：M--model   V--view 视图：jsp  c --controller ---- servlet
     * ---------------------------------------------------
     * 第三阶段：
     * File类：创建文件和文件夹，得到file类的四个构造方法
     * mkdir和mkdirs的区别？
     * file类得到路径？
     * 异常：
     * 数组下标越界：ArrayIndexOutOfBoundsException
     * 空指针异常：NullPointException
     * IOException
     * FileNoFindException 没有找到文件
     * NoSuchClassMethodException  没有匹配方法
     * SQLException
     * NumberFormatException 数字转换字符串异常
     * ----------------------------------------
     * 封装：
     * 单一职责：我们的类里面不能包含和自己不相关的代码
     * 属性必须是私有的，如果需要给别人调用，提供要给get/set方法
     * Java代码里面不允许出现魔法值：（常量）；
     * 如果非要有，则必须单独写一个常量类或者枚举，或者直接读取文件内容
     * --------------------------------------------------
     * 第四阶段：
     * 1.学会数据建模：---E-R图  存在于需求文档
     * 2.概念建模--逻辑建模--物理建模
     * 3.用例图，流程图，类图，时序图。。。。
     * 4.数据库--DCL DML DDL  DQL
     * 5.查询语句：联合查询
     * -----------------------------
     * 6.js 语法
     *      1）页面加载完成执行里面的代码
     *              1.js用法   onload
     *              2.jq的用法  $(function () {
     *              3.layui的用法 layui.use(['laydate', 'form'],
     *      2）数据类型--五种：字符，数字，布尔，对象，数组
     *      3）定义数据--三种  var let  const
     *      4）语法结构：循环  运算符
     *      5）重点数据类型：对象和数组：增删改查
     *      6）html取得对象 ，怎么取得html对象？
     *              1.js document.getElementById("");
     *              2.jq $("id")
     *      7)$.ajax()  $.post()   $.get()
     *      8).注意：button  如果用xadmin，layui，必须返回return false；
     *          否则会刷新页面，如果返回后还是要刷新页面，则可以直接将button修改为div
     *      9）页面之间相互传值：sessionStorage和localStorage  key-value
     *          有时需要清空：sessionStorage.setItem("key",null);
     *      10）复选框取值赋值
     *      11）表单赋值需要重写渲染：form.render();
     *      12)表单渲染自定义模板：
     *      13）对于模板：我们基本上只能拿到ID，
     *           update set user set enable=? where id=?
     *           1)自定义属性取值
     *           2）因为enable只有1或者0，那么只需要根据id去更新即可
     *           注意：对于基础不是很好，我们每一次用户请求，都应该对于后台的代码（不同的代码）
     *           都应该对于不同的方法，不要去合并公共代码（耦合度太高，维护困难）
     *      14）layui取得后台的值，需要打印到控制台
     *           ,parseData: function(res)
     * 7.登录--- 熟悉layui的js
     * 8.验证码
     * 9.正则表达式：我们需要对用户输入的数据进行验证格式是否正确
     * 10.前端和后端的数据传送：Ajax  输出流，resp.getWrite().print();
     * 11.前后端传递数据都用json格式进行传递：在后端需要强制转换json对象，fastjson包
     * 12.当我们熟悉layui的语法后，我们需要给前端一个固定的返回数据格式：ResultModel封装
     * 13.我们需要熟悉前后端的代码书写流程
     *      前端：
     *      1）写页面--需要展示的html或者表单
     *      2）写js--验证输入格式，提交数据（ajax），根据返回数据进行逻辑处理
     *      后端：
     *      1）通过servlet来处理前端的请求：六个步骤：
     *      2）service  逻辑处理
     *      3）dao   封装sql语句，然后根据JDBC返回结果数据解析
     * 14.手写一个JDBC：至少知道几个步骤，思路
     * 15.页面功能---用户对页面进行操作必须给用户响应
     *      1）查询--模糊查询---分页查询
     *      2）新增--输入验证--图片上传--富文本
     *      3）编辑--根据id查询数据--赋值数据到页面--输入验证--图片上传--富文本--提交
     *      4）删除--
     *      5）对状态进行修改---
     *      注意：js代码逻辑关系
     * --------------------------------------------------------------------
     * 第五阶段：
     * redis ---数据类型：String ,list ,set ,hash ,sorted set
     * 线程：实现方式：生命周期：生产者和消费者模型
     * 第六阶段：
     * 反射：
     * maven：jar管理 仓库设置（本地，远程，中央）
     * 注解：常用注解
     * mybatis
     * AOP 面向切面
     * ioc容器 di注入
     *
     *
     *
     *
     *
     *
     *
     *
     *
     */
}
